package jp.syuriken.snsw.terenaibot.format;

import java.util.Arrays;

/**
 * プリコンパイル済みシンタックスグループを格納するクラスです。
 * 一度でも {@link #format(CompileArg)} が呼ばれるとキャッシュされます。
 * (ただしエラーの場合を除く)
 * 
 * @author $Author: snswinhaiku.lo@gmail.com $ */
public final class PrecompiledSyntaxGroup implements PrecompiledSyntax {
	
	private PrecompiledSyntax[] precompiledSyntax;
	
	private String cachedString = null;
	

	/**
	 * インスタンスを生成する。
	 * 
	 * @param syntaxes プリコンパイル済みシンタックス
	 */
	public PrecompiledSyntaxGroup(PrecompiledSyntax[] syntaxes) {
		precompiledSyntax = syntaxes.clone();
	}
	
	@Override
	public String format(CompileArg compileArg) throws FormatSyntaxException {
		if (cachedString == null) {
			StringBuilder stringBuilder = new StringBuilder();
			for (PrecompiledSyntax element : precompiledSyntax) {
				stringBuilder.append(element.format(compileArg));
			}
			return stringBuilder.toString();
		} else {
			return cachedString;
		}
	}
	
	@Override
	public String toString() {
		return Arrays.toString(precompiledSyntax);
	}
}
